【Rider 殘缺中找補釘】
讓 Rider 也像 ReSharper 一樣,套用排版規則,讓 NUnit/xUnit 的測試程式也照著下列順序排版:
① Static field/const
② Field
③ Constructor
④ SetUp/TearDown
⑤ TestMethods (照原順序)
⑥ Static Method
⑦ Method (先照存取層級排序,一樣的層級照 name 排序)
Tags: static const
91 敏捷開發之路
About author
我是 Joey Chen,闖蕩江湖的稱號是 91,熱血點火師,專門燃起大家心裡面的熱情與初衷。
目前為 Odd-e Taiwan 的負責人,同時也是 JetBrains 在台灣的培訓夥伴,至今也仍是熱愛學習與享受各種程式語言之美的 programmer。
身為敏捷教練,擅長 Agile、Scrum、LeSS 等敏捷文化與協作框架的落實與導入,如何讓大家 being agile 而不是 doing agile。同時喜歡結合各家所長,例如 Lean, Kanban 等,重點是持續改善、解決問題、端出成果,而不執著於某種特定方法論或框架。
身為技術教練,我也是極限編程(extreme programming)的狂熱者,我擅長用這些技術與工程實踐來提昇產品的品質、團隊的生產力、降低營運風險,因應市場與公司的商業目標,讓團隊能具有高適應與反應能力的基礎建設。例如 實例化需求、ATDD、BDD、TDD、重構、自動化單元測試/整合測試/驗收測試、CI/CD、code review、pair programming、mob-programming 等等。
同時,我也是推崇 極速開發 的 developer,追求從想法到產品程式碼的完成,中間的時間差能趨近於零,也就是劍隨心轉,想到哪,程式碼就長到哪的境界。從想法到實現中間的等待,其實在實務上佔了很大的 context switch 成本,如果能讓這段時間縮到最短,就能比其他人多嘗試更多種解決方案,進而挑選出最剛好的方案。
同時也是技術社群的活躍份子,從 2010 年開始連任九屆的微軟 MVP,兼任 MSDN 論壇板主,也曾經獲得年度 MSDN 文件庫刊登數量世界第一的榮耀。對微軟技術有愛,對 C# 有愛,對自動測試有愛,對重構與設計模式有愛。近年來對 Java, PHP, Python 也充滿濃厚的興趣,曾帶領客戶團隊中不會寫程式的 QA ,一起用 Python 完成超過百個 mobile UI 自動化測試。
擁有超過十年擔任開發團隊 tech leader, trainer, coach 與 mentor 的經驗,進行的企業內部與公開技術培訓課程已超過 100 場,培訓過的開發人員超過 1000 位,擔任研討會與社群活動的講師次數超過 30 次。
同時也是技術書籍的作者與譯者,與朋友合著的書籍包含《ASP.NET MVC 5:網站開發美學》、《ASP.NET MVC 4 網站開發美學》,翻譯的書籍有《單元測試的藝術-第二版》、《敏捷開發實踐》、《進入IT產業必讀的200個 .NET面試決勝題》。
如果想跟我即時互動,歡迎直接私訊或 email 至 [email protected]。
請參考:https://tdd.best/about/
請參考:https://tdd.best/about/
static const 在 Re: [問題] struct static const member link error - 看板C_and_CPP 的推薦與評價
※ 引述《shininglion (lionking - 辛巴)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: Ubuntu 14.04, g++ v4.8.2
: 問題(Question):
: link error, undefined reference to XXX
: 程式碼(Code):(請善用置底文網頁, 記得排版)
: 問題程式碼如下,分在兩個檔案
: [fileA.h]
: struct A
: {
: static const int val = 0;
: };
: [fileB.cpp]
: /* something */
: std::unordered_map<int, std::string> umap;
: /* somthing */
: const std::string str = umap.at(A::val) + "123"; // error here
: 上面那行就是我的問題所在
: 因為 A::val 是 A 的 static const member,所以語法上應該是沒問題的
: compile 也確實有過,但是 link 時就噴 error 說找不到 A::val
: 後來我把 fileB.cpp 的那一段改成下面這樣就過了:
: [fileB.cpp]
: /* something */
: std::unordered_map<int, std::string> umap;
: /* something */
: const int VAL = A::val;
: const std::string str = umap.at(VAL) + "123"; // pass
: 我想不出原因為什麼一開始的寫法會 link error
: 但是改成下面這種寫法就過了
: 想請問有版友知道原因嗎?
: 謝謝!
根據標準(2003 版的 9.4.2.4)
If a static data member is of const integral or const enumeration type,
its declaration in the class definition can specify a constant-initializer
which shall be an integral constant expression (5.19). In that case,
the member can appear in integral constant expressions. The member shall
still be defined in a namespace scope if it is used in the program and the
namespace scope definition shall not contain an initializer.
所以最標準的寫法是,你應該要在 class 實作的地方(ex:fileA.cpp)加上這行
const int A::val;
至於為什麼另外 assign 到其他變數就可行而傳進 at 卻不行?
我猜是因為 static const int 有可能並沒有 allocate memory
at 接收的是一個 reference,當然會找不到。
而另外 assign 或是加上可以產生 temporary variable 的方法都可以繞過。
不過最正確的方法還是明確給他個 definition。
補上 11 標準的 9.4.2.3
If a non-volatile const static data member is of integral or enumeration
type, its declaration in the class definition can specify a
brace-or-equal-initializer in which every initializer-clause that is an
assignment-expression is a constant expression (5.19). A static data member
of literal type can be declared in the class definition with the constexpr
specifier; if so, its declaration shall specify a brace-or-equal-initializer
in which every initializer-clause that is an assignment-expression is a
constant expression. [ Note: In both these cases, the member may appear in
constant expressions. — end note ] The member shall still be defined in a
namespace scope if it is odr-used (3.2) in the program and the namespace
scope definition shall not contain an initializer.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.34.244.41
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1421812929.A.05F.html
※ 編輯: carylorrk (1.34.244.41), 01/21/2015 12:09:53
... <看更多>